#ifndef STATE_H
#define STATE_H

class State
{
public:
	State();
	State(std::string, bool);
	State(std::list<std::string>*, bool);
	~State();

	bool hasLabel(std::string);
	bool isAcceptState();
	bool matches(State*);
	void makeAcceptState();
	void addLabel(std::string);
	int compareTo(State* other);

	void combineWithState(State*);
	std::string listLabels();

private:
	std::list<std::string>* labels;
	bool bAcceptState;
	friend class NFA;
};

#endif

#ifndef INPUTSTATE_H
#define INPUTSTATE_H

class InputState
{
public:
	InputState(State*, char);
	~InputState();

	State* state;
	char input;
};

#endif